//
// Created by HP on 2021/2/22.
//

#include <iostream>
#include <algorithm>
#include <string>
#include "Student.h"
#include "SortTestHelper.h"
using namespace std;

template <typename T>
void selectionSort(T arr[] , int n){//arr存储数组，n表示元素的个数
    for(int i = 0 ; i < n ; i++){//i=轮次
        //寻找{i,n}区间里的最小值
        int minIndex = i;//最小值存储在minIndex中
        for (int j = i + 1; j < n; j++) {//遍历数组
            if( arr[j]<arr[minIndex] )//查找最小值，比较每个元素
                minIndex = j;//当前最小值的索引下表
         swap( arr[i], arr[minIndex] );//swap是c++标准库中(std)交换函数
        }
    }

}

int main(){
    int n = 1000;
    int *arr = SortTestHelper::generateRandomArray(n,0,n);//利用SortTestHelper中的generateRandomArray测试用例数组
//    selectionSort(arr,n);//a和10对应函数的参数arr[],int n
//    SortTestHelper::printArray(arr,n);//在SortTestHelper中输出函数

    SortTestHelper::testSort("Selection Sort", selectionSort, arr, n);

    delete[] arr;

//    string c[4] = {"D","C","B","A"};//计算机会根据每个字母的ASCAII码值来进行排序
//    selectionSort(c,4);
//    for (int i = 0; i < 4; i++)
//        cout<<c[i]<<" ";
//    cout<< endl;
//
//    Student d[4] = {{"D",90}, {"C",100} , {"B",95} , {"A",95}};//结构体排序
//    selectionSort(d,4);
//    for (int i = 0; i < 4; i++) {
//        cout<<d[i];
//    cout<<endl;
//    }
    return 0;
}